ember-dataのREST APIでメタデータを扱う – Ember.js入門(20)
渡辺です。 筆がのるときは連続投下です。 のらないときは沈黙しますが…
ついにEmber.js入門の連載が20回突破です! 今回はember-dataのREST APIにおけるメタデータの扱いについて説明します。
ember-dataを使ってモデルの一覧を取得する時、ページングなどを行いたい場合があります。 そのような場合は、クエリパラメータをREST APIに付与することができるため、ページ番号やソートキーなどをサーバに送信することができます。
// => http://ENDPOINT_URL/entry?page=3 this.store.find('entry', { page: 3 });
純粋なREST APIにクエリパラメータを持たせることが、良いかどうかの議論には興味がありませんが、現実としてはクエリパラメータを必要とするシーンは多いでしょう。 このようなAPIを使う場合、取得できるモデル情報に加えて、総件数やページ毎の件数といったメタデータも一緒に返したい場合があります。
レスポンスJSONにメタデータを付与する
メタデータはレスポンスJSONに付与することで、クライアントプログラムから参照できるようになります。 自由な形式で記述してもカスタマイズすれば取得できますが、デフォルトのフォーマットは次のようにmetaというキーでオブジェクトを構成します。
{ 'entries': [ { id: 1, title: 'お知らせ1', content: 'お知らせです。', category: 1 }, { id: 2, title: 'お知らせ2', content: 'お知らせです。', category: 1 } ], "meta": { "total": 120, "page": 1 } }
なお、これは言い換えると、metaという名前のモデルを定義すると命名規約的に被ってしまうため、挙動もあやしくなるということを意味します。 Ember.jsは暗黙のルールが多いフレームワークですので、この手の嵌まり所は嵌まって覚えるしかないと思います。
メタデータを取得する
プログラムでメタデータを取得するには、storeオブジェクトのmetadataForメソッドを利用します。
var meta = this.store.metadataFor("entry");
このようにすることで、検索クエリなどを扱った場合に、総件数などのメタデータがクライアントサイドで扱えます。